package com.tomdd.log.config;

import com.tomdd.log.utils.TestThreadLocalUtils;
import org.springframework.core.task.TaskDecorator;

/**
 * 在定义线程池Executor时，其实可以发现Excutor中有个变量叫做TaskDecorator，
 * 这是线程池的一个装饰器，能在线程任务执行前后添加一些自定义逻辑。
 */
public class BusinessContextDecorator implements TaskDecorator {
    @Override
    public Runnable decorate(Runnable runnable) {
        String userContext = TestThreadLocalUtils.get();
        return () -> {
            try {
                TestThreadLocalUtils.set(userContext);
                runnable.run();
            } finally {
                TestThreadLocalUtils.remove();
            }
        };
    }
}

